const BaseModel = require('./base.js');

module.exports = class extends BaseModel {
  // 修改了默认规则，因此必须生成该类，继承于BaseModel
  // 模型关联
  get relation() {
    return {
      members: { // 直接发展的下线
        type: think.Model.HAS_MANY,
        model: 'distribution_member',
        key: 'uid',
        fKey: 'puid'
        // field: 'puid'
      },
      user: { // 用户表信息
        type: think.Model.BELONG_TO,
        model: 'user',
        key: 'uid',
        fKey: 'id',
        field: 'username,mobile,email'
      },
      user_member: { // 用户表扩展信息
        type: think.Model.HAS_ONE,
        model: 'user_member',
        key: 'uid',
        fKey: 'uid',
        field: 'invitation_code'
      },
      merchant: { // 用户所在的公司的信息
        type: think.Model.BELONG_TO,
        model: 'distribution_merchant',
        key: 'merchant_id',
        fKey: 'id'
        // field: 'puid'
      },
      has_merchant: { // 拥有的代理公司
        type: think.Model.HAS_MANY,
        model: 'distribution_merchant',
        key: 'uid',
        fKey: 'uid'
        // field: 'puid'
      }

    };
  }

  get pk() {
    return 'uid';
  }

  // 获取粉丝数量
  get memberCount() {
    return this.where({ puid: this.pk }).count();
  }

  get members() {
    return this.where({ puid: this.pk }).select();
  }

  async getParents(uid, field = true, relation = false) {
    const leaft = await this.where({ uid: uid }).find();
    // think.logger.debug(leaft);
    let height = 0;
    leaft['height'] = height;
    const parents = [];
    let node = leaft;
    while (node['puid'] && node['puid'] > 0) {
      // 商户不参加三级分佣   role_type != 1
      // let parent = await this.where({ uid: node['puid'], role_type: ['!=', 1] }).setRelation(false).find();
      const parent = await this.where({ uid: node['puid'] }).field(field).setRelation(relation).find();
      if (!think.isEmpty(parent)) {
        parent['height'] = ++height;
        node = parent;
        // TODO 暂时忽略字段检测，返回全部字段
        parents.push(parent);
      } else {
        break;
      }
    }
    return parents;
  }

//   public function getAllChildren($root, $field = true)
//   {
//       $model=M('merchant_member');
//       $queue = array();
//       $root['height'] = 0;//数的深度，发展的会员的级别，自身为0

//       array_push($queue, $root);//根结点入队

//       $all_children = array();

//       while (!empty($queue)) {
// //            $inviter = array_shift($queue);//出队,算法太慢
//           $inviter = array_pop($queue);//出队，实现的效果一样，但是速度快很多（不符合标准的层次遍历算法）
//           //查找所有的孩子结点
//           $children = $model->where(array('puid' => $inviter['id']))->field($field)->select();
//           if ($children) {//有孩子结点
//               foreach ($children as &$child) {
//                   $child['height'] = $inviter['height'] + 1;
//                   array_push($queue, $child);//入队

//                   $old_time = $child['create_time'];
//                   //数据转换
//                   $child['subscribe_time'] = date('Y-m-d', $old_time);

//                   //用于统计分析
//                   $child['subscribe_year'] = date('Y', $old_time);
//                   $child['subscribe_month'] = date('m', $old_time);

//                   $child['inviter'] = $inviter; //保存下记录方便快速检索信息
//                   array_push($all_children, $child);//所有的下线
//               }
//           }
//       }

//       return $all_children;
//   }
};
